'use strict';

/**
 * 错误处理中间件
 * 捕获所有异常并返回统一格式的错误响应
 */
module.exports = () => {
  return async function errorHandler(ctx, next) {
    try {
      await next();
    } catch (err) {
      // 记录错误日志
      ctx.logger.error(err);

      // 设置默认错误状态码
      let status = err.status || 500;
      let message = err.message || '服务器内部错误';

      // 处理特定类型的错误
      if (err.name === 'UnauthorizedError') {
        status = 401;
        message = err.message || '未授权访问';
      } else if (err.name === 'ValidationError') {
        status = 400;
        message = err.message || '参数验证失败';
      } else if (err.name === 'SequelizeUniqueConstraintError') {
        status = 409;
        message = '数据已存在';
      } else if (err.name === 'SequelizeValidationError') {
        status = 400;
        message = '数据验证失败';
      }

      // 返回统一的错误格式
      ctx.body = {
        code: status,
        message,
        data: null,
      };
      ctx.status = status;
    }
  };
};
